#!/usr/bin/env bash
#================HEADER======================================================|
#AUTOR
# Jefferson Rocha <root@slackjeff.com.br>
#
#CHANGELOG
# changelog
#============================================================================|
#WORK:
# Melhorar Padrão de busca
# Modularizar
# Documentação

#==========================VARS
# Especificações do Programa
NAME='NetFRIX'
VERSION='0.1a'
AUTHOR='Jefferson Rocha'

# Configurações
DATABASE='database'          # Banco de dados.
archive='/tmp/archive_video' # Arquivo temporário

#COLORS
cyan_='\e[36;1m'
red_='\e[31;1m'
blue_='\e[34;1m'
end_='\e[m'


#==========================TESTS
# Verficando se banco de dados existe.
[ ! -e "${DATABASE}" ] && { echo "${DATABASE} não foi encontrado."; exit 1;}

list=( # Dependencias do programa
   'ffmpeg'
   'wget'
)

# Fazendo as conferencias se todas as
# dependencias existem.
for conf in "${list[@]}"; do
   type "${conf}"&>/dev/null || { echo "${conf} Não existe no sistema."; exit 1;}
done

# Atualizando Banco de Dados.
url_database='https://slackjeff.com.br/database'
echo "====> Atualizando Banco de Dados..."
if wget -q --show-progress "$url_database" -O "$DATABASE"; then
   echo -e "\n====> ${blue_}Banco de dados Atualizado.${end_}"
   sleep 1.2s
fi


#==========================FUNC
die()
{
   echo "Matamos."
   exit 0
}


_LOGO()
{

echo -e "${cyan_}

    _   __     __  __________  _____  __
   / | / /__  / /_/ ____/ __ \/  _/ |/ /
  /  |/ / _ \/ __/ /_  / /_/ // / |   / 
 / /|  /  __/ /_/ __/ / _, _// / /   |  
/_/ |_/\___/\__/_/   /_/ |_/___//_/|_|  
                                        
${end_}
"
}

_ENTER()
{
   read -p "Enter para prosseguir."
}

_CLEAR()
{
   # Removendo arquivos temporários
   [ -e "$archive" ] && rm "$archive"
}


# Função para tocar o padrão, se em todas os gates
# o video se mostrar disponivel o streamming começa.
_PLAY()
{

   local PLAY_NOW_NAME="${LIST_NAME[$choice]}" # Capturando o Nome da escolha
   local PLAY_NOW_URL="${URL[$choice]}" # Capturando a URL de escolha.

   # Qual video está sendo executado?.
   echo -e "${blue_}${PLAY_NOW_NAME}${end_} está sendo reproduzido."
   # Opções de controle.
   echo -e "
     ${cyan_}'q/ESC'${end_} Retornar.
     ${cyan_}'f'${end_} Full Screen.${end_}
     ${cyan_}'p'${end_} Pausar.${end_}
     ${cyan_}'9'${end_} Aumentar Volume.
     ${cyan_}'0'${end_} Abaixar Volume
     ${cyan_}'Direcional Direita'${end_}  Avança 10 segundos.
     ${cyan_}'Direcional Esquerda'${end_} Retrocede 10 segundos.
   "
   # Tocando Video 0 de verbose.
   ffplay -loglevel -8 "$PLAY_NOW_URL"


} 


# Função para procurar o vídeo no banco de dados.
# Se caso exista será chamada a função para stremar
# o vídeo no servidor.
_SEARCH()
{

   i='1' # Var para incremento
   while read line; do
      if echo "$line" | grep -iq "^${search_video}"; then # Existe no banco?
         # Virgem? imprimi então a tabela.
         if [ "$i" = '1' ]; then
               echo -e "${blue_}  ID${end_}\t\t${blue_}NOME${end_}\n"
               echo -e "[ ${red_}0${end_} ]\t\t${red_}Retornar${end_}"
         fi
         name_video=$(echo "$line" | cut -d ';' -f 1) # Pegando somente o nome do vídeo 
         # Pegando o campo nome do video
         # e adicionando em vetor.
         LIST_NAME["$i"]="$name_video"
         # Se houver, pegar o campo do link somente
         # e adicionar em vetor.
         URL["$i"]="$(echo "$line" | cut -d ';' -f 2)"
         echo -e "[${cyan_} ${i} ${end_}]\t\t${LIST_NAME[$i]}" # imprimindo
         i=$(( $i + 1 )) # Incremento
      fi
   done < "$DATABASE"

   # Nenhum padrão achado? Então cai aqui.
   if [ -z "$name_video" ]; then
      echo -e "${red_}Desculpe, não achei nenhum padrão.${end_}"
      _ENTER # Chamada função
      return 1
   fi

   while true; do
      # Se padrão foi achado o usuário deve prosseguir.
      read -p $'\nEntre com o ID para reproduzir vídeo: ' choice # Pegando o indice
      # Nulo? a roleta gira denovo.
      if [ -z "$choice" ]; then
         echo "Ops! Selecione um ID."
         continue
      elif [ "$choice" = "0" ]; then
         return 0
      else
         break
      fi
   done

  # Tudo pronto para chamar função
  # para tocar o vídeo.
  _PLAY
}


#==========================START
# Carregar

menu=( # Adicione as opções do menu aqui!
   'Sair'
   'Ajuda'
   'Assistir um Vídeo'
)
while true; do
   clear
   _LOGO # Chamada da função do LOGO
   i_menu='0' # Incremento para menu
   for op in "${menu[@]}"; do
      if [ "$op" = "Sair" ]; then
         echo -e "[ ${red_}${i_menu}${end_} ] ${op}"
      else
         echo -e "[ ${cyan_}${i_menu}${end_} ] ${op}"
      fi
      i_menu=$(( $i_menu + 1 )) # Incremento
   done
   read -p $'\nEscolha uma opção: ' choice
   [ "$choice" ] || { echo -e "${red_}Escolha uma opção.${end_}"; sleep 0.5s; continue;} # Nulo?
   case $choice in
      0) exit 0 ;;
      1) echo   ;;
      2) 
         read -p $'\e[31;1mDigite o nome do Vídeo: \e[m' search_video
         # Nulo?
         [ "$search_video" ] || { echo -e "${red_}Nulo.${end_}"; sleep 0.5s; continue;} 
         echo -e "Buscando no banco de dados. Aguarde...\n"
         _SEARCH # Chamada função
      ;;
   esac
done


